cmake_minimum_required(VERSION 3.18)

project(FunctionDemo)

function(print_args first second)
    message("ARGC = ${ARGC}") # 实参个数
    message("ARGV = ${ARGV}") # 实参列表 ; 分隔开的字符串
    message("ARGV0 = ${ARGV0}") # 第一个实参
    message("ARGV1 = ${ARGV1}") # 第二个实参
    message("ARGV2 = ${ARGV2}") # 第三个实参
    message("ARGN = ${ARGN}") # 剩余的实参列表
endfunction()

print_args(A B C D E)

# 实现一个加法函数 演示如何传递结果到外层作用域

function(sum A B)
    math(EXPR RESULT "${A} + ${B}")
    set(LOCAL_SUM ${RESULT}) # 局部变量
    set(OUTPUT_SUM ${RESULT} RESULT_SCOPE) # 父级作用域变量
    set(CACHE_SUM ${RESULT} CACHE STRING "sum") # 缓存变量
endfunction()

sum(3 5)
message(STATUS "LOCAL_SUM = ${LOCAL_SUM}")
message(STATUS "OUTPUT_SUM = ${OUTPUT_SUM}")
message(STATUS "CACHE_SUM = $CACHE{CACHE_SUM}")